package com.springboot.demo.common.enums;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Ranj on 2017/9/1 0001.
 */
public enum ErrorCode {

    FAIL(400, "执行失败"),

    PROCESSING(200, "处理中"),


    /*** 系统内部错误码 ******/

    PARAMETER_NOT_EXIST(300, "参数不存在"),

    /**
     * 非法的请求参数
     */
    ILLEGAL_REQUEST_PARAMETER(301, "非法的请求参数"),

    USER_NOT_EXIST(302, "用户不存在"),

    /**
     * 记录不存在
     */
    RECORD_NOT_EXIST(303, "记录不存在"),

    /**
     * 操作不允许
     */
    OPERATION_NOT_PERMIT(304, "操作不允许"),

    /**
     * 查询记录失败
     */
    QUERY_RECORD_FAIL(305, "查询记录失败"),

    /**
     * 用户真实姓名不合法！
     */
    REALNAME_ERROR(306, "用户真实姓名不合法！"),

    /**
     * 用户手机号不合法！
     */
    MOBLIE_ERROR(307, "用户手机号不合法！"),

    /**
     * 用户邮箱不合法！
     */
    EMAIL_ERROR(308, "用户邮箱不合法"),



    /*** 通用错误码 ******/

    SYSTEM_EXCEPTION(500, "系统异常"),
    /**
     * 数据库异常
     */
    DATABASE_EXCEPTION(501, "数据库异常"),
    /**
     * IO异常
     */
    IO_EXCEPTION(502, "IO异常"),
    /**
     * 网络异常
     */
    CONNECT_EXCEPTION(503, "网络异常"),
    /**
     * 程序错误
     */
    APP_ERROR(504, "程序错误"),
    /**
     * 未知异常
     */
    UNKNOWN_EXCEPTION(505, "未知异常"),

    /**
     * 重复推送
     */
    REPEAT_PUSH(600, "重复推送"),
	
	/**
	 * 退出登录
	 * */
	PULL_OUT(998, "退出登录"),
	
	/**
	 * 强制退出
	 * */
	FORCED_OUT(999, "强制退出");
	
    private final Integer code;

    private final String message;

    /**
     *
     */
    private ErrorCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * @return Returns the code.
     */
    public Integer getCode() {
        return code;
    }

    /**
     * @return Returns the message.
     */
    public String getMessage() {
        return message;
    }

    /**
     * @return Returns the code.
     */
    public Integer code() {
        return code;
    }

    /**
     * @return Returns the message.
     */
    public String message() {
        return message;
    }

    /**
     * @param code
     * @return ErrorCode
     */
    public static ErrorCode getByCode(Integer code) {
        for (ErrorCode _enum : values()) {
            if (_enum.getCode() == code) {
                return _enum;
            }
        }
        return null;
    }

    /**
     * @return
     */
    public static Integer getCode(ErrorCode resultEnum) {
        if (resultEnum == null) {
            return null;
        }
        return resultEnum.getCode();
    }

    /**
     * @return
     */
    public static String getMsgByCode(Integer code) {
        if (code == null) {
            return null;
        }
        ErrorCode _enum = getByCode(code);
        if (_enum == null) {
            return null;
        }
        return _enum.getMessage();
    }

    /**
     * @return List<ErrorCode>
     */
    public static List<ErrorCode> getAllEnum() {
        List<ErrorCode> list = new ArrayList<ErrorCode>(values().length);
        for (ErrorCode _enum : values()) {
            list.add(_enum);
        }
        return list;
    }

    /**
     * @return List<String>
     */
    public static List<Integer> getAllEnumCode() {
        List<Integer> list = new ArrayList<Integer>(values().length);
        for (ErrorCode _enum : values()) {
            list.add(_enum.code());
        }
        return list;
    }
}
